package interfaceGraphique;


import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 * Permet de choisir si les taches seront generees aleatoirement ou pas.
 * Permet de choisir les ordonnanceurs pour les taches periodiques et aperiodiques. 
 * @author nicolas rault et matthieu allon
 *
 */
public class FenGenTache extends JDialog implements ActionListener
{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JLabel choixGenTache;
	private JButton boutonGauche;
	private JButton boutonDroit;
	private static FenGenTache singletonFenStructure;
	private boolean genTache;
	private boolean ordoTacheP;
	private boolean ordoTacheAp;
	private FenTacheControle fenTacheControle;
	
	/**
	 * Constructeur de la fenetre
	 * @param nom nom a donner a la fenetre
	 */
	private FenGenTache(String nom)
	{
		this.setTitle(nom);
		this.setSize(330,80);
		this.setLocationRelativeTo(this.getParent());
		genTache = false;
		ordoTacheP = false;
		ordoTacheAp = false;
		
		JPanel pan = new JPanel();
		BorderLayout border = new BorderLayout();
		pan.setLayout(border);
		this.add(pan);
		
		//Creation des differents boutons
		choixGenTache = new JLabel("Choisissez la generation des Taches : ");
		pan.add(choixGenTache,BorderLayout.NORTH);
		
		JPanel test = new JPanel();
		GridLayout border2 = new GridLayout(1,2);
		test.setLayout(border2);
		pan.add(test,BorderLayout.CENTER);
		this.add(pan);
				
		boutonGauche = new JButton("Controlee");
		test.add(boutonGauche,BorderLayout.SOUTH);
		boutonGauche.addActionListener(this);
		
		boutonDroit = new JButton("Aleatoire");
		test.add(boutonDroit,BorderLayout.SOUTH);
		boutonDroit.addActionListener(this);
	}
	
	/**
	 * Permet de recuperer le choix pour la generation des taches.
	 * @return vrai si les taches sont generees aleatoirement, faux sinon.
	 */
	public boolean getGenerationTache()
	{
		return genTache;
	}
	
	/**
	 * Permet de recuperer le choix pour l'ordonnanceur des taches periodiques.
	 * @return vrai si EDF, faux si BG.
	 */
	public boolean getOrdoTacheP()
	{
		return ordoTacheP;
	}
	
	/**
	 * Permet de recuperer le choix pour l'ordonnanceur des taches aperiodiques.
	 * @return vrai si TBS, faux sinon.
	 */
	public boolean getOrdoTacheAp()
	{
		return ordoTacheAp;
	}
	
	/**
	 * Permet d'autoriser une seule creation de la fenetre FenGenTache.
	 * @return la fenetre FenGenTache
	 */
	public static FenGenTache getInstance(String nom) 
	{
		if (singletonFenStructure == null) 
		{
			singletonFenStructure = new FenGenTache(nom);
		}
		else
		{
			singletonFenStructure.setTitle(nom);
		}
		return singletonFenStructure;
	}

	/**
	 * Permet d'assigner une action aux differents evenements survenus sur la fenetre.
	 * @param e evenement recupere par la fenetre
	 */
	public void actionPerformed(ActionEvent e) {
		String bouton = e.getActionCommand();
		if(bouton.equals("Controlee")){
			//Taches generees par l'utilisateur
			genTache = false;
			choixGenTache.setText("Choix de l'algo pour les taches Periodiques : ");
			boutonGauche.setText("RM");
			boutonDroit.setText("EDF");
		}else if(bouton.equals("Aleatoire")){
			//Taches generees aleatoirement
			genTache = true;
			choixGenTache.setText("Choix de l'algo pour les taches Periodiques : ");
			boutonGauche.setText("RM");
			boutonDroit.setText("EDF");
		}else if (bouton.equals("RM")){
			//Ordonnanceur pour les taches periodiques : RM
			ordoTacheP = false;
			choixGenTache.setText("Choix de l'algo pour les taches Aperiodiques : ");
			boutonGauche.setText("BG");
			boutonDroit.setText("TBS");
		}else if(bouton.equals("EDF")){
			//Ordonnanceur pour les taches periodiques : EDF
			ordoTacheP = true;
			choixGenTache.setText("Choix de l'algo pour les taches Aperiodiques : ");
			boutonGauche.setText("BG");
			boutonDroit.setText("TBS");
		}else if (bouton.equals("BG")){
			//Ordonnanceur pour les taches aperiodiques : BG
			ordoTacheAp = false;
			choixGenTache.setText("Choisissez la generation des Taches : ");
			boutonGauche.setText("Controle");
			boutonDroit.setText("Aleatoire");
			this.setVisible(false);
			if(genTache)
			{
				FenChoixOrdoSimul fen = FenChoixOrdoSimul.getInstance();
				fen.setLocation(30, 100);
				fen.setVisible(true);
			}
			else
			{
				fenTacheControle = FenTacheControle.getInstance();
				fenTacheControle.setVisible(true);
				fenTacheControle.setLocation(30, 100);
			}
		}else if(bouton.equals("TBS")){
			//Ordonnanceur pour les taches aperiodiques : TBS
			if(ordoTacheP)
				{
				ordoTacheAp = true;
				choixGenTache.setText("Choisissez la generation des Taches : ");
				boutonGauche.setText("Controlee");
				boutonDroit.setText("Aleatoire");
				this.setVisible(false);
				if(genTache)
				{
					FenChoixOrdoSimul fen = FenChoixOrdoSimul.getInstance();
					fen.setLocation(30, 100);
					fen.setVisible(true);
				}
				else
				{
					fenTacheControle = FenTacheControle.getInstance();
					fenTacheControle.setVisible(true);
					fenTacheControle.setLocation(30, 100);
				}
			}
			else
			{
				FenError error = FenError.getInstance("Impossiblite");
				error.changeLabel("Il est impossible de faire TBS avec RM.");
				error.setLocation(30, 100);
				error.setVisible(true);
			}
		}
	}
}